所有動物生來平等,但有些動物比其他動物更為平等。
-- 喬治·歐威爾, 動物農莊
又一天,同樣的咖啡館,我們坐在窗邊。外面的天空看不見太陽,遠方的山頭,有雲的影子。
不像基本數學,在魔法的世界裡,光只有數字是不夠的。我們還要處理文字以及其它的東西。舉例來說,有個叫布林值的傢伙。他在這個 JS 莊園裡長這個樣子:
true
false
不像數字有無限種可能,布林值就只有這兩個了。分別代表正確與錯誤。
布林值沒有什麼特別的屬性。而兩個布林值間的關係,就是他們可以處理一些組合邏輯判斷,例如 &&
(and) 是兩者皆為真, ||
(or) 是兩者任一為真,^
(xor) 是兩者相異(互斥)。
true && false //=> false (並沒有兩個都是 true)
false || true //=> true (其中一個是 ture)
true ^ false //=> true (兩者相異)
一般來說比較少直接寫下 true
或是 false
,而是某些魔法操作會回傳布林值,例如比較數字的大小:
3 > 0 // => true
我們還可以拿布林值做什麼呢?我們可以把它指派給變數,接著在之後的段落裡使用。
let age = 20
let isAdult = age >= 18
if(isAdult) {
// do something
}
除此之外,我們也可以在呼叫函式時,把布林值當做參數 (argument) 傳進去:
function getDiscountRate(discountOn) {
if (discountOn) {
return 0.8
} else {
return 1.0
}
}
let discountRate = getDiscountRate(true) // => 0.8
最後,我們也可以在函式裡回傳布林值,像這樣:
function isAdult(age) {
return age >= 18
}
而文字呢,在魔法的世界裡,我們把它們稱之為字串。寫法是用雙引號或是單引號把許多字母括起來。
"Hello world!"
你可以把它想像成字元的串列,字元就是英文字母、符號等等。事實上在許多古老一點的城市裡,真的是用字元的串列或陣列來做出文字的。當你用字元的容器的觀點來看字串時,會發現這兩種有很多特性跟用法是共通的。
例如字串的屬性,就有這個字串的長度,是不是空字串等等。而字串與其它字串最重要的關係,也是兩個字串可以串在一起。
"Hello" + "World" //=> "HelloWorld"
而字串,也可以做到剛才所說的三件事:指派給變數、做為呼叫函式的傳入值,及讓函式回傳字串。
let name = "John" //指派給變數
function greeting(userName) {
return "Hello! my name is " + userName //做為函式回傳值
}
greeting(name) //當做呼叫函式的參數
不管是字串、布林值、數字以及之前提到過的串列(陣列),這些在魔法世界的觀點裡,都是一種資料,也可以稱之為**(實)值**,它們都可以進行剛剛所說的三種操作:
符合這些特性的東西,我們會把它們稱之為該國度的一等公民 (first class citizen)。
終於,我們可以提出那個非常重要的問題了:
「函式,也是一等公民嗎?」
換句話說,我們可以把函式指派給變數、或把函式當做呼叫函式的傳入值,以及讓某個函式回傳函式嗎?
[to be continue]